﻿#!/bin/bash
#author:Castle Moriarty
# date:2025-10-20



### 有一个目录/data/att/,该目录下有数百个子目录
### 比如/data/att/aming, /data/att/linux
### 然后在深入一层为以日期命名的目录，例如 /data/att/aming/20251009
### 每天会生成一个日期新目录，由于/data所在磁盘快满了
### 所以需要将老文件(一年前的)挪到另外一个目录/data1/att下
### 例如： mv /data/att/aming/202510109 /data1/att/aming/202510109
### 挪完之后，还需要做软链接
### 示例：ln -s /data1/att/aming/202510109 /data/att/aming/202510109
### 写一个脚本，要求/data/att/下所有子目录都要按此操作
### 脚本每天01:00 执行一次，任务计划无需考虑，只需要写脚本即可
### 提醒：要确保老文件成功挪到/data1/att下之后才能做软链接，需要有日志


## 先定一一个main函数，目的是为了后面调用函数，方便记录日志
main()
{
  cd /data/att
  ## 遍历第一层目录
  for dir in `ls`
  do
    ## 遍历第二层目录，用find只找当前目录下一年以前的子目录
    for dir2 in `find $dir -maxdepth 1 -type d -mtime +365`
    do
      ## 将目标目录下的文件同步到/data1/att/目录下，注意这里的-R可以自动创建目录结构
      rsync -aR $dir2/ /data1/att/
      if [ $? -eq 0 ]
      then
        ## 如果同步成功，会将/data/att下的目录删除
        rm -rf $dir2
        echo "/data/att/$dir2 移动成功"
        ## 做软链接
        ln -s /data1/att/$dir2 /data/att/$dir2 && \
        echo "/data/att/$dir2成功创建软链接"
        echo
      else
        echo "/data/att/$dir 未移动成功"
      fi
    done
  done
}

## 调用main函数，并将输出写入日志里，日志每天一个
main &> /tmp/move_old_data_`date +%F`.log

## 关键知识点总结：
## 可以通过main函数的形式来方便定一脚本日志
## find 使用 -maxdepth 定义查找目录层级
## 脚本某行很长的话，可以使用"\ + 回车"来换行，但本质上还是一行内容
## rsync的-R选择可以自动级联创建目录层级